﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Core.Framework.Interceptors.Enums
{
    /// <summary>
    /// 事务传播类型
    /// </summary>
    public enum Propagation
    {
        /// <summary>
        /// 如果业务方法执行时已经在一个事务中，则加入当前事务，否则重新开启一个事务
        /// </summary>
        Required,
        /// <summary>
        /// 每次都是创建一个新事务，如果当前已经在事务中了，会挂起当前事务
        /// </summary>
        RequiresNew,
        /// <summary>
        /// 如果当前已经在一个事务中了，则嵌套在已有的事务中作为一个子事务。如果当前没在事务中则开启一个事务
        /// </summary>
        Nested,
        /// <summary>
        /// 当前有事务就支持。当前没有事务就算了，不会开启一个事务
        /// </summary>
        Supports,
        /// <summary>
        /// 如果业务方法执行时已经在一个事务中，则加入当前事务。否则抛出异常
        /// </summary>
        Mandatory,
        /// <summary>
        /// 不支持事务，如果业务方法执行时已经在一个事务中，则挂起当前事务，等方法执行完毕后，事务恢复进行
        /// </summary>
        NotSupported,
        /// <summary>
        /// 不支持事务。如果当前已经在一个事务中了，抛出异常
        /// </summary>
        Never,
    }
}
